0

I have this weird situation going on. I am trying to de-prefix some of the raspberry pi c library functions. For example I want bcm2835_delay() to be delay(). I have two files, pi.h and pi.c. When I compile the two with gcc -lm pi.c -c my de-prefixed delay() becomes bcm2835_delay(). Below are my two files and the output of objdump -t pi.o.

pi.h

#include <bcm2835.h>

#define PIN05 RPI_V2_GPIO_P1_05
#define PIN07 RPI_V2_GPIO_P1_07
#define PIN08 RPI_V2_GPIO_P1_08
#define PIN10 RPI_V2_GPIO_P1_10
#define PIN11 RPI_V2_GPIO_P1_11
#define PIN12 RPI_V2_GPIO_P1_12
#define PIN13 RPI_V2_GPIO_P1_13
#define PIN15 RPI_V2_GPIO_P1_15
#define PIN16 RPI_V2_GPIO_P1_16
#define PIN18 RPI_V2_GPIO_P1_18
#define PIN19 RPI_V2_GPIO_P1_19
#define PIN21 RPI_V2_GPIO_P1_21
#define PIN22 RPI_V2_GPIO_P1_22
#define PIN23 RPI_V2_GPIO_P1_23
#define PIN24 RPI_V2_GPIO_P1_24
#define PIN26 RPI_V2_GPIO_P1_26

#define INPUT BCM2835_GPIO_FSEL_INPT
#define OUTPUT BCM2835_GPIO_FSEL_OUTP

// rename the delay function given already
void delay(unsigned int millis);

// rename the microsecond delay function
void delay_micro(uint64_t micros);

// set the pinout to low, check that the pin is output
void set_low(uint8_t pin);

// ease the input setting
void set_input(uint8_t pin);

// ease the output setting
void set_output(uint8_t pin);

and pi.c

#include <bcm2835.h>
#include "pi.h"

// rename the delay function given already
void delay(unsigned int millis) {
  bcm2835_delay(millis);
}

// rename the microsecond delay function
void delay_micro(uint64_t micros) {
  bcm2835_delayMicroseconds(micros);
}

// set the pinout to low, check that the pin is output
void set_low(uint8_t pin) {

}

// ease the input setting
void set_input(uint8_t pin) {
  bcm2835_gpio_fsel(pin, INPUT);
}

// ease the output setting
void set_output(uint8_t pin) {
  bcm2835_gpio_fsel(pin, OUTPUT);
}

output

pi.o: file format elf32-littlearm

SYMBOL TABLE:
00000000 l    df *ABS*  00000000 pi.c
00000000 l    d  .text  00000000 .text
00000000 l    d  .data  00000000 .data
00000000 l    d  .bss 00000000 .bss
00000000 l    d  .note.GNU-stack  00000000 .note.GNU-stack
00000000 l    d  .comment 00000000 .comment
00000000 l    d  .ARM.attributes  00000000 .ARM.attributes
00000000 g     F .text  00000020 bcm2835_delay
00000020 g     F .text  00000020 delay_micro
00000000         *UND*  00000000 bcm2835_delayMicroseconds
00000040 g     F .text  00000020 set_low
00000060 g     F .text  0000002c set_input
00000000         *UND*  00000000 bcm2835_gpio_fsel
0000008c g     F .text  0000002c set_output

here you can see that all of my function definitions made it to the symbol table just fine except the delay() function. In the symbol table it shows up as bcm2835_delay. If I change delay() to my_delay() it makes it into the symbol table as my_delay() just fine. What is going on here?

1 Answers1

0

Compiler had treated your functions as inline functions.

imkort
  • 81
  • 1
  • 8