# How do breakpoints even work? | Interrupt

**URL:** <https://community.memfault.com/t/how-do-breakpoints-even-work-interrupt/220>\
**Category:** Blog\
**Created:** [June 17, 2020, 4:28am UTC](https://community.memfault.com/t/how-do-breakpoints-even-work-interrupt/220 "2020-06-17T04:28:13Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![discobot](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.memfault.com/discobot/32/1_2.png) [@discobot](https://community.memfault.com/u/discobot)\
**Post date:** [June 17, 2020, 4:28am UTC](https://community.memfault.com/t/how-do-breakpoints-even-work-interrupt/220/1 "2020-06-17T04:28:13Z")

</div>

The idea of halting program execution was invented over 70 years ago as part of the ENIAC digital computer. At the time, to pause a program and debug, you had to physically unplug one of the cables controlling program flow, which was coined a “breakpoint”.

* * *
This is a companion discussion topic for the original entry at [https://interrupt.memfault.com/blog/cortex-m-breakpoints](https://interrupt.memfault.com/blog/cortex-m-breakpoints)

---

<div class="post-metadata">

**Author:** ![Jack3100](https://avatars.discourse-cdn.com/v4/letter/j/a88e4f/32.png) [@Jack3100](https://community.memfault.com/u/Jack3100)\
**Post date:** [November 19, 2020, 6:21am UTC](https://community.memfault.com/t/how-do-breakpoints-even-work-interrupt/220/2 "2020-11-19T06:21:16Z")

</div>

Hi， I compile the break example but it report a error like:  
Linking library  
/usr/lib/gcc/arm-none-eabi/9.2.1/…/…/…/arm-none-eabi/bin/ld: /usr/lib/gcc/arm-none-eabi/9.2.1/…/…/…/arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc.a(lib\_a-abort.o): in function `abort': /build/newlib-CVVEyx/newlib-3.3.0/build/arm-none-eabi/thumb/v7e-m+fp/hard/newlib/libc/stdlib/../../../../../../../../newlib/libc/stdlib/abort.c:59: undefined reference to `\_exit’  
/

I search for a while, some post say a link flag `-specs=nosys.specs` should be add. But it still fail after I add this flag to LDFLAGS.

I’m on ubuntu 20.10 and use the arm-none-eabi-gcc version 9.2.1

---

<div class="post-metadata">

**Author:** ![ranjith](https://avatars.discourse-cdn.com/v4/letter/r/8797f3/32.png) [@ranjith](https://community.memfault.com/u/ranjith)\
**Post date:** [November 23, 2020, 1:16pm UTC](https://community.memfault.com/t/how-do-breakpoints-even-work-interrupt/220/3 "2020-11-23T13:16:45Z")

</div>

Hi @chrisc

> These days more and more embedded devices perform full firmware updates and so the practice is becoming less common. The art of flash patching deserves a post of its own so we won’t be digging deeper here.

Regarding the above statement, still lot of low cost MCUs still use it for patching the ROM code in Cortex M. There is no alternative for it. And few does not allow you to see the ROM symbols during debug because the MCU is using FPB unit for patching the buggy ROM functions by making the code point to flash code and jump back to ROM code.
