[PATCH] D30724: Dont emit Mapping symbols for sections that contain only data.
Shankar Easwaran via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 21 10:28:05 PDT 2017
shankare added inline comments.
================
Comment at: lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp:630-631
+ // executable permissions.
+ if (LastEMS != EMS_None ||
+ (cast<MCSectionELF>(getCurrentSectionOnly()))->UseCodeAlign()) {
+ LastEMSInfo->resetInfo();
----------------
shankare wrote:
> t.p.northover wrote:
> > shankare wrote:
> > > t.p.northover wrote:
> > > > shankare wrote:
> > > > > t.p.northover wrote:
> > > > > > I still don't see why we need this `UseCodeAlign` special case, I'm afraid.
> > > > > The only time that we want to emit a Data symbol is if the section was set to be executable but it contains data.
> > > > >
> > > > >
> > > > Why? The ABI says nothing about an executable bit:
> > > >
> > > > "A section must have a mapping symbol defined at the beginning of the section; however, if the section contains only data then the mapping symbol may be omitted."
> > > If the section is marked as containing instructions(on elf using the section flag, UseCodeAlign checks for section permission) and it contains data, dont we need a $d to specifiy beginning of data.
> > >
> > > GCC does it as the below test shows :-
> > >
> > > The section foobar has a section flag below to specify that it contains instructions.
> > >
> > > $ cat b.s
> > > .section .foobar,"ax",%progbits
> > > .word 32
> > >
> > > $ readelf -s b.o
> > >
> > > Symbol table '.symtab' contains 7 entries:
> > > Num: Value Size Type Bind Vis Ndx Name
> > > 0: 00000000 0 NOTYPE LOCAL DEFAULT UND
> > > 1: 00000000 0 SECTION LOCAL DEFAULT 1
> > > 2: 00000000 0 SECTION LOCAL DEFAULT 2
> > > 3: 00000000 0 SECTION LOCAL DEFAULT 3
> > > 4: 00000000 0 SECTION LOCAL DEFAULT 4
> > > 5: 00000000 0 NOTYPE LOCAL DEFAULT 4 $d
> > > 6: 00000000 0 SECTION LOCAL DEFAULT 5
> > >
> > Not according to how I read the ABI. It's quite possible GNU as adds unneeded symbols in that case, but I don't think "because GCC does it" is reason enough for us to add this complexity when we've got an actual document telling us what we should be doing.
> How would objdump or anytool be able to find out that an executable section is having data ? Without adding a mapping symbol I believe it would be hard for objdump to figure out that information.
Sure, We can decide if we would want to mimic that behavior probably later then.
https://reviews.llvm.org/D30724
More information about the llvm-commits
mailing list