Handle pack_relocations in linker.cc
When pack_relocations is false and clang lld is used, pass --pack-dyn-relocs=none to lld. Bug: 80093890 Test: build and boot with USE_CLANG_LLD=true Change-Id: I0ffe77a111d7fbab5afaa1395d09734a8a390e09
This commit is contained in:
parent
4a789b1c3d
commit
8681471e70
3 changed files with 14 additions and 1 deletions
1
cc/cc.go
1
cc/cc.go
|
@ -1493,6 +1493,7 @@ func DefaultsFactory(props ...interface{}) android.Module {
|
|||
&VendorProperties{},
|
||||
&BaseCompilerProperties{},
|
||||
&BaseLinkerProperties{},
|
||||
&MoreBaseLinkerProperties{},
|
||||
&LibraryProperties{},
|
||||
&FlagExporterProperties{},
|
||||
&BinaryLinkerProperties{},
|
||||
|
|
13
cc/linker.go
13
cc/linker.go
|
@ -122,6 +122,13 @@ type BaseLinkerProperties struct {
|
|||
Use_version_lib *bool `android:"arch_variant"`
|
||||
}
|
||||
|
||||
// TODO(http://b/80437643): BaseLinkerProperties is getting too big,
|
||||
// more than 2^16 bytes. New properties are defined in MoreBaseLinkerProperties.
|
||||
type MoreBaseLinkerProperties struct {
|
||||
// Generate compact dynamic relocation table, default true.
|
||||
Pack_relocations *bool `android:"arch_variant"`
|
||||
}
|
||||
|
||||
func NewBaseLinker() *baseLinker {
|
||||
return &baseLinker{}
|
||||
}
|
||||
|
@ -129,6 +136,7 @@ func NewBaseLinker() *baseLinker {
|
|||
// baseLinker provides support for shared_libs, static_libs, and whole_static_libs properties
|
||||
type baseLinker struct {
|
||||
Properties BaseLinkerProperties
|
||||
MoreProperties MoreBaseLinkerProperties
|
||||
dynamicProperties struct {
|
||||
RunPaths []string `blueprint:"mutated"`
|
||||
}
|
||||
|
@ -147,7 +155,7 @@ func (linker *baseLinker) linkerInit(ctx BaseModuleContext) {
|
|||
}
|
||||
|
||||
func (linker *baseLinker) linkerProps() []interface{} {
|
||||
return []interface{}{&linker.Properties, &linker.dynamicProperties}
|
||||
return []interface{}{&linker.Properties, &linker.MoreProperties, &linker.dynamicProperties}
|
||||
}
|
||||
|
||||
func (linker *baseLinker) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
|
||||
|
@ -256,6 +264,9 @@ func (linker *baseLinker) linkerFlags(ctx ModuleContext, flags Flags) Flags {
|
|||
|
||||
if flags.Clang && linker.useClangLld(ctx) {
|
||||
flags.LdFlags = append(flags.LdFlags, fmt.Sprintf("${config.%sGlobalLldflags}", hod))
|
||||
if !BoolDefault(linker.MoreProperties.Pack_relocations, true) {
|
||||
flags.LdFlags = append(flags.LdFlags, "-Wl,--pack-dyn-relocs=none")
|
||||
}
|
||||
} else {
|
||||
flags.LdFlags = append(flags.LdFlags, fmt.Sprintf("${config.%sGlobalLdflags}", hod))
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ var relocationPackerRule = pctx.AndroidStaticRule("packRelocations",
|
|||
})
|
||||
|
||||
type RelocationPackerProperties struct {
|
||||
// Generate compact dynamic relocation table, default true.
|
||||
Pack_relocations *bool `android:"arch_variant"`
|
||||
|
||||
// This will be true even if we're embedded in Make, in which case
|
||||
|
|
Loading…
Reference in a new issue