~lsof/antcc

70adc3e3e8560eb76d5eb6b93a1f88be7fba549c — lemon 7 months ago 1e3093b
make ptr offset in init take obj size into account
2 files changed, 5 insertions(+), 4 deletions(-)

M c.c
M test/init.c
M c.c => c.c +4 -3
@@ 1114,11 1114,12 @@ expr2reloc(union ref *psym, vlong *paddend, const struct expr *ex)
   } else if (globsym(psym, ex) && in_range(ex->ty.t, TYARRAY, TYFUNC)) {
      *paddend = 0;
   } else if (ex->t == ESUB && globsym(psym, &ex->sub[0]) && isint(ex->sub[1].ty) && ex->sub[1].t == ENUMLIT) {
      *paddend = ex->sub[1].i;
      *paddend = ex->sub[1].i * typesize(ex->sub[0].ty);
   } else if (ex->t == EADD) {
      for (int swp = 0; swp < 2; ++swp) {
         if (globsym(psym, &ex->sub[swp]) && isint(ex->sub[swp^1].ty) && ex->sub[swp^1].t == ENUMLIT) {
            *paddend = ex->sub[swp^1].i;
         struct expr *a = &ex->sub[swp], *b = &ex->sub[swp ^ 1];
         if (globsym(psym, a) && isint(b->ty) && b->t == ENUMLIT) {
            *paddend = b->i * typesize(a->ty);
            return;
         }
      }

M test/init.c => test/init.c +1 -1
@@ 41,7 41,7 @@ void f() {
}
*/

void *rec[1] = {rec};
void *rec[1] = {rec+1};

int printf(char *, ...);
int main() {