Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

Consider compiling test.c, with this content:
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
#include "test.h"

int
main (int argc, char **argv)
{
  int a = PLUS (1,2);
  int b = PLUS (3,4);
  return 0;
}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

...where test.h has this content:
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
extern int foo ();

#define PLUS(A, B) A + B
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


The undocumented -fdump-internal-locations option outputs this information
to stderr, showing what each location_t value means.  Source code
lines are quoted, showing both per-line location_t values and
per-line&column location_t values (written vertically under the
corresponding character of source code).

VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
RESERVED LOCATIONS
  location_t interval: 0 <= loc < 2

ORDINARY MAP: 0
  location_t interval: 32 <= loc < 64
  file: test.c
  starting at line: 1
  column and range bits: 12
  column bits: 7
  range bits: 5
  reason: 0 (LC_ENTER)
  included from location: 0
test.c:  1|loc:   32|#include "test.h"
                    |69269258258148147
                    |46802468024680246

ORDINARY MAP: 1
  location_t interval: 64 <= loc < 96
  file: <built-in>
  starting at line: 0
  column and range bits: 0
  column bits: 0
  range bits: 0
  reason: 2 (LC_RENAME)
  included from location: 0

ORDINARY MAP: 2
  location_t interval: 96 <= loc < 128
  file: <command-line>
  starting at line: 0
  column and range bits: 0
  column bits: 0
  range bits: 0
  reason: 2 (LC_RENAME)
  included from location: 0

ORDINARY MAP: 3
  location_t interval: 128 <= loc < 250240
  file: /usr/include/stdc-predef.h
  starting at line: 1
  column and range bits: 12
  column bits: 7
  range bits: 5
  reason: 0 (LC_ENTER)
  included from location: 127 (in ordinary map 2)
(contents of /usr/include/stdc-predef.h snipped for brevity)

ORDINARY MAP: 4
  location_t interval: 250240 <= loc < 250272
  file: <command-line>
  starting at line: 32
  column and range bits: 12
  column bits: 7
  range bits: 5
  reason: 1 (LC_LEAVE)
  included from location: 0

ORDINARY MAP: 5
  location_t interval: 250272 <= loc < 254368
  file: test.c
  starting at line: 1
  column and range bits: 12
  column bits: 7
  range bits: 5
  reason: 2 (LC_RENAME)
  included from location: 0
test.c:  1|loc:250272|#include "test.h"
                     |00000000000000000
                     |33344445556667778
                     |03603692692582581
                     |46802468024680246

ORDINARY MAP: 6
  location_t interval: 254368 <= loc < 266720
  file: test.h
  starting at line: 1
  column and range bits: 12
  column bits: 7
  range bits: 5
  reason: 0 (LC_ENTER)
  included from location: 250272 (in ordinary map 5)
test.h:  1|loc:254368|extern int foo ();
                     |444444444444444444
                     |444455566677788899
                     |036926925825814814
                     |024680246802468024
test.h:  2|loc:258464|
                     |
                     |
                     |
                     |
test.h:  3|loc:262560|#define PLUS(A, B) A + B
                     |222222222222233333333333
                     |566677788899900011122223
                     |925825814814704703603692
                     |246802468024680246802468
test.h:  4|loc:266656|
                     |
                     |
                     |
                     |

ORDINARY MAP: 7
  location_t interval: 266720 <= loc < 299520
  file: test.c
  starting at line: 2
  column and range bits: 12
  column bits: 7
  range bits: 5
  reason: 1 (LC_LEAVE)
  included from location: 0
test.c:  2|loc:266720|
                     |
                     |
                     |
                     |
test.c:  3|loc:270816|int
                     |000
                     |889
                     |481
                     |802
test.c:  4|loc:274912|main (int argc, char **argv)
                     |4455555555555555555555555555
                     |9900011122223334445556667778
                     |4704703603692692582581481470
                     |4680246802468024680246802468
test.c:  5|loc:279008|{
                     |9
                     |0
                     |4
                     |0
test.c:  6|loc:283104|  int a = PLUS (1,2);
                     |333333333333333333333
                     |112222333444555666777
                     |360369269258258148147
                     |680246802468024680246
test.c:  7|loc:287200|  int b = PLUS (3,4);
                     |777777777777777777777
                     |222333444555666777888
                     |369269258258148147047
                     |246802468024680246802
test.c:  8|loc:291296|  return 0;
                     |11111111111
                     |33344455566
                     |26925825814
                     |80246802468
test.c:  9|loc:295392|}
                     |5
                     |4
                     |2
                     |4
test.c: 10|loc:299488|
                     |
                     |
                     |
                     |

UNALLOCATED LOCATIONS
  location_t interval: 299520 <= loc < 2147483632

MACRO 3: PLUS (7 tokens)
  location_t interval: 2147483632 <= loc < 2147483639
test.c:7:11: note: expansion point is location 287555
    7 |   int b = PLUS (3,4);
      |           ^~~~
  map->start_location: 2147483632
  macro_locations:
    0: 287744, 263200
test.c:7:17: note: token 0 has x-location == 287744
    7 |   int b = PLUS (3,4);
      |                 ^
test.c:7:17: note: token 0 has y-location == 263200
    1: 263264, 263264
In file included from test.c:1:
test.h:3:22: note: token 1 has x-location == y-location == 263264
    3 | #define PLUS(A, B) A + B
      |                      ^
    2: 287808, 263328
test.c:7:19: note: token 2 has x-location == 287808
    7 |   int b = PLUS (3,4);
      |                   ^
test.c:7:19: note: token 2 has y-location == 263328
    3: 0, 0
cc1: note: token 3 has x-location == y-location == 0
    4: 0, 0
cc1: note: token 4 has x-location == y-location == 0
    5: 0, 0
cc1: note: token 5 has x-location == y-location == 0
    6: 0, 0
cc1: note: token 6 has x-location == y-location == 0

MACRO 2: PLUS (7 tokens)
  location_t interval: 2147483639 <= loc < 2147483646
test.c:6:11: note: expansion point is location 283459
    6 |   int a = PLUS (1,2);
      |           ^~~~
  map->start_location: 2147483639
  macro_locations:
    0: 283648, 263200
test.c:6:17: note: token 0 has x-location == 283648
    6 |   int a = PLUS (1,2);
      |                 ^
test.c:6:17: note: token 0 has y-location == 263200
    1: 263264, 263264
In file included from test.c:1:
test.h:3:22: note: token 1 has x-location == y-location == 263264
    3 | #define PLUS(A, B) A + B
      |                      ^
    2: 283712, 263328
test.c:6:19: note: token 2 has x-location == 283712
    6 |   int a = PLUS (1,2);
      |                   ^
test.c:6:19: note: token 2 has y-location == 263328
    3: 0, 0
cc1: note: token 3 has x-location == y-location == 0
    4: 0, 0
cc1: note: token 4 has x-location == y-location == 0
    5: 0, 0
cc1: note: token 5 has x-location == y-location == 0
    6: 0, 0
cc1: note: token 6 has x-location == y-location == 0

MACRO 1: __GCC_IEC_559_COMPLEX (1 tokens)
  location_t interval: 2147483646 <= loc < 2147483647
In file included from <command-line>:31:
/usr/include/stdc-predef.h:45:6: note: expansion point is location 180564
   45 | # if __GCC_IEC_559_COMPLEX > 0
      |      ^~~~~~~~~~~~~~~~~~~~~
  map->start_location: 2147483646
  macro_locations:
    0: 1, 1
<built-in>: note: token 0 has x-location == y-location == 1

MACRO 0: __GCC_IEC_559 (1 tokens)
  location_t interval: 2147483647 <= loc < 2147483648
/usr/include/stdc-predef.h:37:6: note: expansion point is location 147788
   37 | # if __GCC_IEC_559 > 0
      |      ^~~~~~~~~~~~~
  map->start_location: 2147483647
  macro_locations:
    0: 1, 1
<built-in>: note: token 0 has x-location == y-location == 1

MAX_LOCATION_T
  location_t interval: 2147483647 <= loc < 2147483648

AD-HOC LOCATIONS
  location_t interval: 2147483648 <= loc < 4294967295
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^