summaryrefslogtreecommitdiff
path: root/rtemstoolkit/rld-elf.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'rtemstoolkit/rld-elf.cpp')
-rw-r--r--rtemstoolkit/rld-elf.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/rtemstoolkit/rld-elf.cpp b/rtemstoolkit/rld-elf.cpp
index 8b2ac5e..2d3d090 100644
--- a/rtemstoolkit/rld-elf.cpp
+++ b/rtemstoolkit/rld-elf.cpp
@@ -421,6 +421,7 @@ namespace rld
file::file ()
: fd_ (-1),
+ refs (0),
archive (false),
writable (false),
elf_ (0),
@@ -438,6 +439,18 @@ namespace rld
}
void
+ file::reference_obtain ()
+ {
+ ++refs;
+ }
+
+ void
+ file::reference_release ()
+ {
+ --refs;
+ }
+
+ void
file::begin (const std::string& name__, int fd__, const bool writable_)
{
begin (name__, fd__, writable_, 0, 0);
@@ -551,6 +564,9 @@ namespace rld
void
file::end ()
{
+ if (refs > 0)
+ throw rld::error ("References still held", "elf:file:end: " + name_);
+
if (elf_)
{
if (rld::verbose () >= RLD_VERBOSE_FULL_DEBUG)