[PATCH] D54369: [llvm-size][libobject] Add explicit "inTextSegment" methods similar to "isText" section methods to calculate size correctly.

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Nov 10 13:26:01 PST 2018


MaskRay added inline comments.


================
Comment at: include/llvm/Object/ELFObjectFile.h:767
+         (getSection(Sec)->sh_flags & ELF::SHF_EXECINSTR ||
+          (!(getSection(Sec)->sh_flags & ELF::SHF_WRITE)));
+}
----------------
The parentheses outside of `!` are redundant.

`GNU size` uses Berkeley format by default (`static int berkeley_format = BSD_DEFAULT;`)
I'd say it uses a weird counting https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=binutils/size.c;h=3c72e484752d0272a24ac628f497f89ecf36d547;hb=refs/heads/master#l459

 459   if ((flags & SEC_CODE) != 0 || (flags & SEC_READONLY) != 0)
 460     textsize += size;
 461   else if ((flags & SEC_HAS_CONTENTS) != 0)
 462     datasize += size;
 463   else
 464     bsssize += size;

Basically `SHF_EXECINSTR` sections (`.text`) + `!SHF_WRITE` sections (`.rodata .eh_frame` ...).

I feel the name `inTextSegment` is a bit misleading. How about `isBerkeleyText`?

`inDataSegment` may be renamed to `isBerkeleyData`.


Repository:
  rL LLVM

https://reviews.llvm.org/D54369





More information about the llvm-commits mailing list