Значит, нужно в объектный файл записать имя файла исходника, из которого он возник, и задача перехода к исходнику будет решена. Я об этом сразу и написал, возможно, не совсем внятно. При этом данное решение будет работать в любом случае, независимо от того, как всё устроено.

Другой вариант - типа файла проекта, а точнее, набора правил, который преобразует имя модуля в имя файла - тоже жизненен. Менее надёжен, но более гибок, например, позволяет проинсталлировать кросс-компилированную систему на другой компьютер и тыкать в исходники. В лиспе и такой вариант есть - так обычно показываются исходники самой реализации.

Есть и третий вариант - разработка в образе, когда объектный файл содержит все исходники в себе.

Какой из них лучше - это вопрос, достойный обсуждения.